home *** CD-ROM | disk | FTP | other *** search
/ Super PC 34 / Super PC 34 (Shareware).iso / spc / UTIL / DJGPP2 / V2 / DJLSR200.ZIP / src / libc / posix / dirent / readdir.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-05-25  |  966 b   |  42 lines

  1. /* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */
  2. #include <libc/stubs.h>
  3. #include <string.h>
  4. #include <dirent.h>
  5. #include <errno.h>
  6. #include <ctype.h>
  7. #include "dirstruc.h"
  8.  
  9. struct dirent *
  10. readdir(DIR *dir)
  11. {
  12.   int done;
  13.   int oerrno = errno;
  14.   if (dir->num_read)
  15.     done = findnext(&dir->ff);
  16.   else
  17.   {
  18.     int ff_flags = FA_ARCH|FA_RDONLY|FA_DIREC|FA_SYSTEM;
  19.     if (dir->flags & __OPENDIR_FIND_HIDDEN)
  20.       ff_flags |= FA_HIDDEN;
  21.     if (dir->flags & __OPENDIR_FIND_LABEL)
  22.       ff_flags |= FA_LABEL;
  23.     done = findfirst(dir->name, &dir->ff, ff_flags);
  24.   }
  25.   if (done)
  26.   {
  27.     if (errno == ENMFILE)
  28.       errno = oerrno;
  29.     return 0;
  30.   }
  31.   dir->num_read ++;
  32.   strcpy(dir->de.d_name, dir->ff.ff_name);
  33.   dir->de.d_namlen = strlen(dir->de.d_name);
  34.   if (!(dir->flags & __OPENDIR_PRESERVE_CASE))
  35.   {
  36.     char *cp;
  37.     for (cp=dir->de.d_name; *cp; cp++)
  38.       *cp = tolower(*cp);
  39.   }
  40.   return &dir->de;
  41. }
  42.